// 
// Copyright 2010 Classpath Pty Ltd <opensource@classpath.com.au>
// 
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// 
//     http://www.apache.org/licenses/LICENSE-2.0
// 
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// 

using build

**
** Tests the `CanCreateColumn` mixin.
**
internal class CanCreateColumnTest : Test {

    **
    ** Stores an instance of `CanCreateColumn` for testing.
    **
    CanCreateColumn? canCreateColumn

    **
    ** Performs additional setup needed for `CanCreateColumnTest`.
    **
    override Void setup() {
        super.setup()
        canCreateColumn = CanCreateColumnTestClass()
    }

    **
    ** Cleans up additional setup needed for `CanCreateColumnTest`.
    **
    override Void teardown() {
        super.teardown()
        canCreateColumn = null
    }

    **
    ** Tests the `CanCreateColumn.createColumn` method.
    **
    Void testCreateColumn() {
        column := canCreateColumn.createColumn("column_name", canCreateColumn.varchar(1234))
        verifyEq("column_name", column.name)
        verifyEq(VarcharType#, column.type.typeof)
        verifyEq(1234, (column.type as VarcharType).length)
        verifyEq(1, canCreateColumn.modifications.size)
        verifyEq(column, canCreateColumn.modifications[0])
    }

}

**
** Provides a simple implementation of `CanCreateColumn` for testing.
**
internal class CanCreateColumnTestClass : CanCreateColumn {

    **
    ** Stores the list of [Modifications]`Modification` for testing.
    **
    override Modification[] modifications := [,]

}
